home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 2.iso
/
ACORNUSERS
/
CBSA
/
EDUCATION
/
WIMPPOLL
/
cc
/
WimpTask
< prev
Wrap
Text File
|
1997-12-17
|
3KB
|
123 lines
//-----------------------------------
// WimpTask.c
//-----------------------------------
#include <string.h>
#include <os.h>
#include <trap.h>
#include "WimpError.h"
#include "WimpTask.h"
WimpTask::WimpTask(char *info, int wimp_version, int *message_list)
{
int r[10];
os_error *e;
strncpy(taskname, info, 31);
taskname[31] = 0;
r[0] = wimp_version;
r[1] = 'T' +
('A' << 8) +
('S' << 16) +
('K' << 24);
r[2] = (int) taskname;
r[3] = (int) message_list;
if ((e = os_swi (Wimp_Initialise, r)) != NULL) throw(e);
handle = r[1];
EnableEvent(ESEND);
EnableEvent(ESENDWANTACK);
}
WimpTask::~WimpTask()
{
int r[10];
r[0] = handle;
r[1] = 'T' +
('A' << 8) +
('S' << 16) +
('K' << 24);
os_swi(Wimp_CloseDown, r);
}
bool WimpTask::load(char *path, int a, int b)
{
return FALSE;
}
bool WimpTask::save(char *path, int &a)
{
a=0;
return FALSE;
}
bool WimpTask::receive()
{
int r[10];
os_error *e;
bool quit;
switch(User_Message.code)
{
case 0: // Quit.
return TRUE;
break;
case 2:
int size;
quit = save(User_Message.data_load_ack.pathname,size);
User_Message.your_ref = User_Message.my_ref;
User_Message.code = 3;
User_Message.size = size;
r[0] = (int) ESENDWANTACK;
r[1] = (int) &User_Message;
r[2] = User_Message.data_load_ack.dest_window;
r[3] = User_Message.data_load_ack.icon;
os_swi(Wimp_SendMessage, r);
return quit;
break;
case 3: // Load Event.
User_Message.your_ref = User_Message.my_ref;
User_Message.code = 4;
r[0] = (int) ESEND;
r[1] = (int) &User_Message;
r[2] = User_Message.task_sender;
os_swi(Wimp_SendMessage, r);
quit = load(User_Message.data_load_ack.pathname,
User_Message.data_load_ack.size,
User_Message.data_load_ack.type);
return quit;
break;
default:
return FALSE;
break;
}
}
void WimpTask::run()
{
int r[10];
os_error *e;
bool quit = 0;
while (!quit)
{
r[0] = mask_event;
r[1] = (int) block;
if ((e = os_swi(Wimp_Poll, r)) != NULL) throw (e);
switch (r[0])
{
case ENULL : quit = NullEvent(); break;
case EREDRAW : quit = RedrawWindow(); break;
case EOPEN: quit = OpenWindow(); break;
case ECLOSE: quit = CloseWindow(); break;
case ESEND: quit = receive(); break;
case ESENDWANTACK: quit = receive(); break;
}
}
}